package cmpe451.group7.ourcity.service;

import java.util.Date;
import java.util.List;

import cmpe451.group7.ourcity.entity.Place;
import cmpe451.group7.ourcity.entity.Tag;
import cmpe451.group7.ourcity.entity.TagSimilarity;

public interface SearchService {

	/**
	 * Find a list of similarity pairs of a list of tags. similarity pairs
	 * include a superset of the given tags
	 * 
	 * @param tags
	 * @return
	 */
	public List<TagSimilarity> getTagSimilarities(List<Tag> tags);

	/**
	 * Extends the given tags with their similar tags
	 * 
	 * @param tags
	 * @return
	 */
	public List<Tag> getRelatedTags(List<Tag> tags);

	/**
	 * Find the related places with the given tags
	 * 
	 * @param tags
	 * @return
	 */
	public List<Place> getRelatedPlaces(List<Tag> tags);

	/**
	 * This routine is the main search routine with similarity enabled
	 * 
	 * @param placeName
	 * @param country
	 * @param city
	 * @param fromDate
	 * @param toDate
	 * @param tags
	 * @param ne_lat
	 * @param ne_lng
	 * @param sw_lat
	 * @param sw_lng
	 * @return
	 */
	public List<Place> detailedSearch(String placeName, String country,
			String city, Date fromDate, Date toDate, List<Tag> tags,
			double ne_lat, double ne_lng, double sw_lat, double sw_lng);

	public List<Place> detailedSearch(String placeName, String country,
			String city, Date fromDate, Date toDate, List<Tag> selectedTags);

}
